home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 08 - 1992 / 08.03 Jul 92 / Matrix Parser / InputAMatrix < prev    next >
Encoding:
Text File  |  1992-12-24  |  3.7 KB  |  188 lines  |  [TEXT/PJMM]

  1. unit InputAMatrix;
  2.  
  3.  
  4. interface
  5.  
  6.  
  7.     uses
  8.  
  9.         Globals, Commands, Eval;
  10.  
  11.  
  12.     procedure InputAMatrix (var savename: stringsize; var kmat: longint; var mrows, ncols: longint; var randommod: longint; var randommatrix: boolean);
  13.  
  14.  
  15. implementation
  16.  
  17.     procedure InputAMatrix;
  18.  
  19.         label
  20.             998, 999;
  21.  
  22.         type
  23.  
  24.             matrixnamearray = array[1..maxnumberofstrings] of hdlstringsize;
  25.             ptrmatrixnamearray = ^matrixnamearray;
  26.             hdlmatrixnamearray = ^ptrmatrixnamearray;
  27.  
  28.             cntarray = array[1..200] of longint;
  29.             ptrcntarray = ^cntarray;
  30.             hdlcntarray = ^ptrcntarray;
  31.  
  32.  
  33.         var
  34.             rows, cols, y: extended;
  35.             mdresult, mdline, name, dummyfilename: str255;
  36.             i, j, k, randomlongint: longint;
  37.             matrixelement: hdlmatrixnamearray;
  38.             matrixdummy: hdlsinglearraymatrix;
  39.             vRefNum: integer;
  40.             err: OSErr;
  41.             fileinfo: fInfo;
  42.  
  43.     begin
  44.  
  45.         rows := mrows;
  46.         cols := ncols;
  47.  
  48.         if randommatrix then
  49.             begin
  50.                 createamatrix(savename, mrows, ncols, kmat);
  51.  
  52.                 if matrixstoredinfile^^[kmat] then
  53.                     begin
  54.                         if not mfileopen^^[kmat] then
  55.                             begin
  56.                                 open(matfile^^[kmat]^^, strvar^^[kmat]^^);
  57.                                 mfileopen^^[kmat] := true;
  58.                             end;
  59.                         rewrite(matfile^^[kmat]^^);
  60.                         write(matfile^^[kmat]^^, rows);
  61.                         write(matfile^^[kmat]^^, cols);
  62.                     end
  63.                 else
  64.                     begin
  65.                         storematrix^^[kmat]^^[1] := rows;
  66.                         storematrix^^[kmat]^^[2] := cols;
  67.                     end;
  68.  
  69.                 i := 0;
  70.                 for j := 1 to mrows do
  71.                     for k := 1 to ncols do
  72.                         begin
  73.                             i := i + 1;
  74.                             randomlongint := random mod randommod;
  75.                             y := randomlongint;
  76.                             if matrixstoredinfile^^[kmat] then
  77.                                 write(matfile^^[kmat]^^, y)
  78.                             else
  79.                                 storematrix^^[kmat]^^[i + 2] := y;
  80.                         end;
  81.                 if matrixstoredinfile^^[kmat] then
  82.                     if mfileopen^^[kmat] then
  83.                         begin
  84.                             close(matfile^^[kmat]^^);
  85.                             mfileopen^^[kmat] := false;
  86.                         end;
  87.                 goto 999;
  88.             end;
  89.  
  90.         dummyfilename := 'dummyfile';
  91.  
  92.         if not dummyopen then
  93.             begin
  94.                 open(dummyfile, dummyfilename);
  95.                 dummyopen := true;
  96.             end;
  97.  
  98.         rewrite(dummyfile);
  99.  
  100.         matrixelement := hdlmatrixnamearray(NewHandle(SizeOf(matrixnamearray)));
  101.  
  102.         k := 0;
  103.         for i := 1 to mrows do
  104.             begin
  105.                 writeln('row  ', i : 3);
  106.                 for j := 1 to ncols do
  107.                     begin
  108.                         k := k + 1;
  109.                         write(blank);
  110.                         readln(mdline);
  111.                         writeln(dummyfile, mdline);
  112.                         matrixelement^^[k] := hdlstringsize(NewHandle(SizeOf(stringsize)));
  113.                         matrixelement^^[k]^^ := mdline;
  114.                     end;
  115.             end;
  116.  
  117.         reset(dummyfile);
  118.  
  119.         createamatrix(savename, mrows, ncols, kmat);
  120.  
  121.         if matrixstoredinfile^^[kmat] then
  122.             begin
  123.                 if not mfileopen^^[kmat] then
  124.                     begin
  125.                         open(matfile^^[kmat]^^, strvar^^[kmat]^^);
  126.                         mfileopen^^[kmat] := true;
  127.                     end;
  128.                 rewrite(matfile^^[kmat]^^);
  129.                 y := rows;
  130.                 write(matfile^^[kmat]^^, y);
  131.                 y := cols;
  132.                 write(matfile^^[kmat]^^, y);
  133.             end
  134.         else
  135.             begin
  136.                 storematrix^^[kmat]^^[1] := rows;
  137.                 storematrix^^[kmat]^^[2] := cols;
  138.             end;
  139.  
  140.  
  141.         for i := 1 to mrows * ncols do
  142.             begin
  143.                 readln(dummyfile, mdline);
  144.                 mdresult := eval(mdline);
  145.                 if mdline = 'error' then
  146.                     begin
  147.                         if mfileopen^^[kmat] then
  148.                             begin
  149.                                 close(matfile^^[kmat]^^);
  150.                                 mfileopen^^[kmat] := false;
  151.                             end;
  152.                         writeln(mdresult);
  153.                         goto 999;
  154.                     end;
  155.                 readstring(mdresult, y);
  156.                 if matrixstoredinfile^^[kmat] then
  157.                     write(matfile^^[kmat]^^, y)
  158.                 else
  159.                     storematrix^^[kmat]^^[i + 2] := y;
  160.             end;
  161.  
  162. 998:
  163.  
  164.         if matrixstoredinfile^^[kmat] then
  165.             if mfileopen^^[kmat] then
  166.                 begin
  167.                     close(matfile^^[kmat]^^);
  168.                     mfileopen^^[kmat] := false;
  169.                 end;
  170.  
  171.         if dummyopen then
  172.             begin
  173.                 close(dummyfile);
  174.                 dummyopen := false;
  175.             end;
  176.  
  177.         err := GetVol(@name, vRefNum);
  178.         name := dummyfilename;
  179.         err := FSDelete(name, vRefNum);
  180.  
  181.         DisposHandle(handle(matrixelement));
  182.  
  183. 999:
  184.     end;
  185.  
  186.  
  187.  
  188. end.